Python + Appium实现手势密码

目的

要做APP的GUI测试,技术方案是Python+Appium。
遇到一个棘手的问题:我们的产品登陆页面的密码控件进行了安全加固,不能通过自动化输入密码。
解决方案有两个思路:

  1. 让开发提供单独的测试版本,绕过安全插件;————开发不同意
  2. 通过图像识别技术,从密码键盘识别密码,计算坐标,模拟屏幕点击;————实现成本过高
    最后商议了一个折中的方案:APP提供手势密码,自动化通过手势密码登陆

方案

基本思路是通过TouchAction中提供的各种方法,如press()、move_to()等,模拟手势操作,完成手势登陆。

TouchAction

AppiumDriver的辅助类,主要针对手势操作,比如滑动、长按、拖动等。TouchAction的原理是讲一系列的动作放在一个链条中,然后将该链条传递给服务器。服务器接受到该链条后,解析各个动作,逐个执行。
主要方法有:
press()
release()
move_to()
tap()
perform()

遇到的问题

我们APP中的手势键盘,九宫格整体上是一个元素,而不是每个点为一个元素,这样没法获取各个点的坐标。
解决方法是通过九宫格的坐标,计算出各个点的具体坐标,再填入脚本中。

代码实现

1
2
3
4
5
6
7
8
9
10
gesture = APP.find_element_by_id(self.gesture)
location = gesture.location
size = gesture.size
x = location['x']
y = location['y']
z = size['width'] / 3
TouchAction(APP).press(x=x + z / 2, y=y + z / 2).wait(200).move_to(x=0, y=z).wait(200).move_to(x=0, y=z)\
.wait(200).move_to(x=z, y=0).release().perform()

这样就绘制了一个小”L”形的手势密码
注意:move_to()参数中的x、y都是相对坐标

欢迎打赏!